﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

/*******11.转义字符*******/

//1.\n 表示换行
//2.\? 在书写连续多个问号时使⽤，防⽌他们被解析成三字⺟词
//3.\' ⽤于表⽰字符常量
//4.\" ⽤于表⽰⼀个字符串内部的双引号
//5.\\ ⽤于表⽰⼀个反斜杠，防⽌它被解释为⼀个转义序列符。
//6.\a 警报，这会使得终端发出警报声或出现闪烁，或者两者同时发⽣。
//7.\b 退格键，光标回退⼀个字符，但不删除字符。
//8.\f 换⻚符，光标移到下⼀⻚。在现代系统上，这已经反映不出来了，⾏为改成类似于 \v 。
//9.\n 换⾏符。
//10.\r 回⻋符，光标移到同⼀⾏的开头。
//11.\t 制表符，光标移到下⼀个⽔平制表位，通常是下⼀个4 / 8的倍数。
//12.\v 垂直分隔符，光标移到下⼀个垂直制表位，通常是下⼀⾏的同⼀列。

//13.\ddd ：d d d表⽰1~3个⼋进制的数字
//14.\xdd ：d d表⽰2个⼗六进制数字

/*
int main()
{
	//printf("abcd\nef");

	//? ? )  -- > ]
	//? ? (--> [以前会被解析成方括号, 现在不支持了
	//printf("(Are you ok \?\?)");

	//printf("%c\n",'\'');

	//printf("%s\n","\"");

	//printf("c:\test\ddd\test.c\n");
	//printf("c:\\test\\ddd\\test.c\n");

	//printf("\a");

	//printf("abcdef\b");
	//getchar();

	//printf("abcdef\r");

	//printf("abc\tdef");

	//printf("%c\n",'\130');//130是8进制，转换成10进制是88，以88作为ASCII码值的字符是'X'
	
	//printf("%c\n", '\x30');//x30中的30是16进制，转换成10进制是48，以48作为ASCII码值的字符是'0'
	
	return 0;
}*/

/*
int main()
{
	//int len = strlen("abc");//string length
	//strlen统计\0之前的字符个数

	int len = strlen("c:\test\abc\182\test.c");
	printf("%d\n",len);
	return 0;
}*/
/**********************/

/***12.语句和语句分类***/

//1.空语句
//2.表达式语句
//3.函数调⽤语句
//4.复合语句
//5.控制语句

/*
int main()
{
	;//空语句
	3 + 4;//表达式语句
	printf("hehe");//函数调⽤语句
	{}//复合语句
	//if switch for.. 控制语句
	return 0;
}*/

/**********************/

/*********二.数据类型和变量*************/
/****1.数据类型介绍*****/
//1.1 字符型
// char
// 
//1.2 整型
// int; short int = short; long int = long; long long int = long long;

//1.3 浮点型
// float; double; long double;

//1.4 布尔类型
//_Bool
//布尔类型的使⽤得包含头⽂件 <stdbool.h>
//布尔类型变量的取值是： true 或者 false .

/*
#include <stdbool.h>
int main()
{
	//_Bool n = true; //true是真，false是假
	bool n = true;
	if (n)
		printf("hehe\n");
	return 0;
}*/

//1.5 各种数据类型的⻓度

// sizeof 操作符
//sizeof返回值类型是size_t的，这种值用%zd打印
/*
int main()
{
	int a = 10;
	printf("%zd\n", sizeof a);//变量可省括号
	printf("%zd\n",sizeof(a));

	printf("%zd\n", sizeof(int));
	return 0;
}*/

/*
int main()
{
	int a = 10;
	short s = 5;
	printf("%zd\n", sizeof(s = a + 2));//sizeof里不会真实的计算
	printf("s = %d\n",s);
	return 0;
}*/

/*
int main()
{
	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(_Bool));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(long double));
	return 0;
}*/

/**********************/

/****2.signed和unsigned*****/
//signed 和 unsigned 关键字只能修饰 字符型和整型 类型

/*
int main()
{
	signed int num1 = -100;
	unsigned int num2 = 100;
	printf("%d\n",num1); //%d--打印有符号整形
	printf("%u\n", num2);//%u--打印无符号整型
	return 0;
}*/


/**********************/

/********4.变量********/
//4.1 变量的创建

/*
int main()
{
	int a;//变量定义，未初始化
	int a = 0;//变量初始化

	return 0;
}*/

//4.2 变量的分类
//全局变量和局部变量

/*
int b = 0;//全局变量,全局变量是放在内存的静态区
int main()
{
	int a = 0;//局部变量,局部变量是放在内存的栈区
	int b = 10; //当局部变量和全局变量同名的时候，局部变量优先使⽤
	{
		int  c = 100;//局部变量
		printf("%d\n",b);
	}
	return 0;
}*/

/*
int b;//全局变量不初始化，默认会被编译器初始化为0
int main()
{
	int a;//局部变量未初始化，值是随机的；
	printf("%d\n",a);
	return 0;
}*/


/**********************/

/**********作业**********/
//int main()
//{
//	printf("%d\n",strlen("c:\test\121"));
//	return 0;
//}

//int num = 10;
//int main()
//{
//	int num = 1;
//	printf("%d\n", num);
//	return 0;
//}
/**********************/